//package com.treasure.service.helper;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.util.HashSet;
//import java.util.concurrent.atomic.AtomicInteger;
//
///**
// * 生成long类型ID并具有一定随机性,整体具有增大趋势,每秒最大支持生成约26W个
// * @author echx
// */
//public class LongUUidMananger {
//
//    public static long newId() {
//        return INSTANCE.Generators[UID_TYPE].genId();
//    }
//
//	private static LongUUidMananger INSTANCE = new LongUUidMananger();
//	private LongUidGenerator[] Generators;
//	private Thread timeUpdator;
//	private static final int UID_TYPE = 0;//用户主键
////	private static final int MID_TYPE = 0;//信息主键
//
//	private LongUUidMananger() {
//		Generators = new LongUidGenerator[1];
//		for(int i=0;i<Generators.length;i++) {
//			Generators[i] = new LongUidGenerator(0);
//		}
//		timeUpdator = new Thread("LongUUidMananger-TimeUpdator") {
//			public void run() {
//				long now = 0;
//				while(true) {
//					try {
//						Thread.sleep(1010);
//					}
//					catch(Throwable ignore) {}
//					now = System.currentTimeMillis();
//					for(int i=0;i<Generators.length;i++) {
//						Generators[i].resetTimeHeader(now);
//					}
//				}
//			}
//		};
//		timeUpdator.setDaemon(true);
//		timeUpdator.start();
//	}
//
//	private static class LongUidGenerator {
//        private Logger logger = LoggerFactory.getLogger(this.getClass());
//		private AtomicInteger seq;
//		private volatile long timeHeader;
//		private final int instanceId;
//
//		public LongUidGenerator(int instanceId) {
//			this.seq = new AtomicInteger(0);
//			this.timeHeader = System.currentTimeMillis();
//			this.instanceId = instanceId;
//		}
//
//		public void resetTimeHeader(long now) {
//			if(now/1000 != this.timeHeader/1000) {
//				timeHeader = now;
//				seq.set(0);
//			}
//			else {
//				logger.warn("LongUUIDManager GET SAME TIME!", now);
//			}
//		}
//		/**
//		 * 每秒26w id生成器
//		 * @return
//		 */
//		public long genId() {
//			return ((this.timeHeader/1000)<<22)+(instanceId<<18)+seq.getAndIncrement();
//		}
//
//		public static long time(long id) {
//			return (id>>22)*1000;
//		}
//	}
//
//
//	public static void main(String ...args) throws Exception {
//		LongUidGenerator gen = new LongUidGenerator(1);
//		HashSet<Long> set = new HashSet<>(520000*4/3);
//		long id = gen.genId();
//		int i = 0;
//		while(i<520000) {
//			id = gen.genId();
//			if(set.contains(id)) {
//				System.out.println("bad same"+id);
//			}
//			++i;
//			set.add(id);
//		}
//		System.out.println(id+"|"+ LongUidGenerator.time(id));
//
//		System.out.println(LongUidGenerator.time(6112578698739712L));
//		System.out.println("----------");
//		Thread.sleep(10000);
//	}
//}
